package web;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.birrap.ejb.UsuariosTBeanLocal;
import org.birrap.entities.UsuariosT;
import util.FacesMessagesUtil;

@ManagedBean
@RequestScoped
/**
 * Clase utilizada para la gestion de la logica del login de la aplicacion
 */
public class LoginManagedBean {
    
    private FacesContext context;
    
    @EJB
    private UsuariosTBeanLocal usuarioBean;
    
    private UsuariosT usuario;
    
    /**
     * Constructor en el que inicializamos un nuevo UsuarioT y almacenamos el FacesContext
     */
    public LoginManagedBean() {
        usuario = new UsuariosT();
        context = FacesContext.getCurrentInstance();
    }
    
    /**
     * Metodo que una vez se pase la validacion, si existe el usuario introducido se hace login correctamente 
     * y en el caso de que el usuario no exista se muestra un mensaje de error.
     * @return 
     */
    public String login() 
    {
        String res = "ERROR";
        if(validate()) 
        {
            usuario = usuarioBean.findByCorreoAndPassword(usuario.getCorreo(), usuario.getPassword());

            if(usuario == null) 
            {
               FacesContext.getCurrentInstance()
                           .addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                              "El correo o el password no es correcto.", 
                                                              "El correo o el password no es correcto."));
                res = "ERROR";
            }
            else 
            {
                context.getExternalContext().getSessionMap().put("usuario", usuario);
                res = "OK";
            }
        }        
        return res;
    }
    
    /**
     * Metodo en el que vemos si se ha introducido un correo y un password
     * @return boolean
     */
    private boolean validate() 
    {
        boolean validado = false;
        
        if(usuario.getCorreo() == null || usuario.getCorreo().isEmpty()) 
        {
             context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                       "El campo correo es obligatorio.", 
                                                       "El campo correo es obligatorio."));
        }
        if(usuario.getPassword().isEmpty() || usuario.getPassword().isEmpty()) 
        {
             context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                       "El campo password es obligatorio.", 
                                                       "El campo password es obligatorio."));
        }
        if (!FacesMessagesUtil.hasMessages(context))
        {
            validado = true;
        }
        return validado;
    }

    public UsuariosT getUsuario() {
        return usuario;
    }

    public void setUsuario(UsuariosT usuario) {
        this.usuario = usuario;
    }
}
